import {
	ICtrlActionResult,
	IMDCtrlAbility,
	IMDCtrlStore,
	IParam,
} from '@/core';
import { IDECtrlController } from './i-de-ctrl-controller';

/**
 * 多数据部件控制器接口
 *
 * @export
 * @interface IMDCtrlController
 * @extends {ICtrlController}
 */
export interface IMDCtrlController<
	S extends IMDCtrlStore,
	A extends IMDCtrlAbility
> extends IDECtrlController<S, A> {
	/**
	 * 多数据部件数据加载
	 *
	 * @param {IParam} [opts]
	 * @return {*}  {Promise<void>}
	 * @memberof IListController
	 */
	load(opts?: IParam): Promise<ICtrlActionResult | void>;

	/**
	 * 排序变化
	 *
	 * @param {string} sortField 排序字段
	 * @param {('asc' | 'desc' | '')} sortDir 排序方向
	 * @memberof IMDCtrlController
	 */
	handleSortChange(sortField: string, sortDir: 'asc' | 'desc' | ''): void;

	/**
	 * 页码变化
	 *
	 * @param {number} currentPage 当前页码
	 * @memberof IMDCtrlController
	 */
	handlePageChange(currentPage: number): void;

	/**
	 * 分页大小变化
	 *
	 * @param {number} pageSize 分页大小
	 * @memberof IMDCtrlController
	 */
	handlePageSizeChange(pageSize: number): void;

	/**
	 * 分页变化
	 *
	 * @param {{args:number,size:number}} args 分页{page:number,size:number}
	 * @memberof IMDCtrlController
	 */
	handlePaginationChange(args: any): void;

	/**
	 * 处理选中数据改变
	 *
	 * @param {IParam[]} selections
	 * @memberof IMDCtrlController
	 */
	handleSelectionChange(selections: IParam[]): void;

	/**
	 * 选择全部
	 *
	 * @memberof IMDCtrlController
	 */
	selectAll(): void;

	/**
	 * 选中数据
	 *
	 * @param {IParam[]} items 需要选中的数据
	 * @param {boolean} [reverse] 是否反选
	 * @memberof IMDCtrlController
	 */
	selectItems(items: IParam[], reverse?: boolean): void;

	/**
	 * 导出Excel
	 *
	 * @param {IParam} [opt]
	 * @memberof IMDCtrlController
	 */
	exportExcel(opt?: IParam): void;
}
